package matse11.lspiel;

public class Logik {
	
	private static short[][][]gewinnsituationen=new short[15][4][4];
	
	public static short[][][] getGewinnsituationen(){
		return gewinnsituationen;
	}
	
	public static short moeglicherZugRichtig(short[][] ak,short[][]lStein,short[][]neutralerStein){
//		ueberpruefung ob zug moeglich
		boolean gleich=true; 
		short[][] tmp=ak;
		int feldsumme=0;//Variable, die false ist wenn lStein nicht an der glecihen Stelle wie vorher ist
//		wenn Spieler1 dran ist:
		if(Spiel.getZug()%2!=0){
//		ueberpruefung ob lStein an der gleichen stelle
			for(int j=0;j<ak.length;j++){
				for(int i=0;i<ak[0].length;i++){
					if(ak[j][i]==1&&lStein[j][i]!=1){
						gleich=false;
						break;
					}
				}
			}
			if(gleich){
				return 0;
			}
//		L-Stein
			for(int i=0;i<lStein.length;i++){
				for(int j=0;j<lStein[0].length;j++){
					if(ak[i][j]==1){
						tmp[i][j]=0;
					}
					else{
						tmp[i][j]=ak[i][j];
					}
					if(lStein[i][j]==1){
						if(tmp[i][j]!=0){
							return 0;
						}
						else{
							tmp[i][j]=1;
						}
					}
				}
			}
	//		neutraler Stein
			for(int k=0;k<tmp.length;k++){
				for(int l=0;l<tmp[0].length;l++){
					if(neutralerStein[k][l]==-1){
						if(tmp[k][l]>0){
							return 0;
						}
						else{
							tmp[k][l]=-1;
						}
						feldsumme+=tmp[k][l];
					}
				}
			}
			if(feldsumme!=10){
				return 0;
			}
//			wenn ein neutraler Stein auf einem anderen liegt
		}
		else{	
//		wenn Spieler2 dran ist:
//			ueberpruefung ob lStein an der gleichen stelle
			for(int j=0;j<ak.length;j++){
				for(int i=0;i<ak[0].length;i++){
					if(ak[j][i]==2&&lStein[j][i]!=2){
						gleich=false;
						break;
					}
				}
			}
			if(gleich){
				return 0;
			}
//		L-Stein
			for(int i=0;i<lStein.length;i++){
				for(int j=0;j<lStein[0].length;j++){
					if(ak[i][j]==2){
						tmp[i][j]=0;
					}
					else{
						tmp[i][j]=ak[i][j];
					}
					if(lStein[i][j]==2){
						if(tmp[i][j]!=0){
							return 0;
						}
						else{
							tmp[i][j]=2;
						}
					}
				}
			}
	//		neutraler Stein
			for(int k=0;k<tmp.length;k++){
				for(int l=0;l<tmp[0].length;l++){
					if(neutralerStein[k][l]==-1){
						if(tmp[k][l]>0){
							return 0;
						}
						else{
							tmp[k][l]=-1;
						}
						feldsumme+=tmp[k][l];
					}
				}
			}
			if(feldsumme!=10){
				return 0;
			}
//			wenn ein neutraler Stein auf einem anderen liegt
		}
//		wenn Programm hier angelangt, dann ist das setzen des l-Steins & des neutralen moeglich
//		jetzt ueberpruefung, ob gewinnsituation
		
		if(Operator.pruefe(tmp,gewinnsituationen)){
			return 2;
		}
		return 1;
//		return werte: 0=nicht moeglich, 1=moeglich, 2=gewonnen
	}
	
	public static void logik(){
//		erzeugt gewinnpositionen, muss vor beginn des spieles einmal aufgerufen werden
		short[][]feld1={{0,0,-1,0},
						{1,1,1,0},
						{2,0,1,0},
						{2,2,2,-1}};
		gewinnsituationen[0]=feld1;
		short[][]feld2={{0,0,1,0},
						{-1,0,1,0},
						{2,1,1,-1},
						{2,2,2,0}};
		gewinnsituationen[1]=feld2;
		short[][]feld3={{0,-1,0,0},
						{-1,1,0,0},
						{2,1,1,1},
						{2,2,2,0}};
		gewinnsituationen[2]=feld3;
		short[][]feld4={{0,-1,0,0},
						{-1,0,0,1},
						{2,1,1,1},
						{2,2,2,0}};
		gewinnsituationen[3]=feld4;
		short[][]feld5={{2,0,-1,0},
						{2,2,2,-1},
						{1,1,1,0},
						{0,0,1,0}};
		gewinnsituationen[4]=feld5;
		short[][]feld6={{0,0,0,-1},
						{1,1,1,0},
						{2,0,1,0},
						{2,2,2,-1}};
		gewinnsituationen[5]=feld6;
		short[][]feld7={{0,0,1,0},
						{-1,0,1,0},
						{2,1,1,1},
						{2,2,2,0}};
		gewinnsituationen[6]=feld7;
		short[][]feld8={{0,0,-1,0},
						{-1,1,0,0},
						{2,1,1,1},
						{2,2,2,0}};
		gewinnsituationen[7]=feld8;
		short[][]feld9={{0,0,-1,0},
						{-1,0,0,1},
						{2,1,1,1},
						{2,2,2,0}};
		gewinnsituationen[8]=feld9;
		short[][]feld10={{2,0,-1,0},
						{2,2,2,1},
						{-1,1,1,1},
						{0,0,0,0}};
		gewinnsituationen[9]=feld10;
		short[][]feld11={{0,0,0,0},
						{1,1,1,-1},
						{2,0,1,0},
						{2,2,2,-1}};
		gewinnsituationen[10]=feld11;
		short[][]feld12={{0,0,1,0},
						{1,1,1,0},
						{2,0,-1,0},
						{2,2,2,-1}};
		gewinnsituationen[11]=feld12;
		short[][]feld13={{0,1,0,0},
						{-1,1,0,0},
						{2,1,1,-1},
						{2,2,2,0}};
		gewinnsituationen[12]=feld13;
		short[][]feld14={{0,0,1,0},
						{-1,0,1,0},
						{2,-1,1,1},
						{2,2,2,0}};
		gewinnsituationen[13]=feld14;
		short[][]feld15={{0,0,1,0},
						{0,-1,1,0},
						{-1,2,1,1},
						{0,2,2,2}};
		gewinnsituationen[14]=feld15;
	}

}
